//
//  main.m
//  04- 集合02
//
//  Created by dllo on 16/7/7.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
    // 字典
    // 存储键值对（key-value）的集合类型
    // 字典中存储数据没有顺序
    // 通过key值存储，查询value
    
    // 1>初始化
    // 字典中只能存放对象类型（NSObject的子类）
    // 如果出现汉字，代码提示一定会失效
#if 0
    NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"zhangsan",@"name",@"10",@"age",@"male",@"gender", nil];
    //2> 便利构造器
    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"name",[NSNumber numberWithInt:10],@"age",@"male",@"gender", nil];
    // 3> 字面量 @{ @"":@""}
    NSDictionary *dic3 = @{@"name":@"zhangsan",
                           @"age":@"10",
                           @"gender":@"male"                 };
    
    //4> 取值
    // <1>通过key取value
    NSString *name = [dic3 objectForKey:@"name"];
    // <2>获取所有key
    NSArray *arr = [dic3 allKeys];
    // <3>获取所有vlaue
    NSArray *arr1 = [dic3 allValues];
    // <4> count
    NSUInteger count = dic3.count;
    
    //<5> 通过一个数组取到对应数组的value
     NSArray *all = [dic3 objectsForKeys:dic3.allKeys notFoundMarker:[NSString class]];
    NSLog(@"%@",all);
    //6 通过一个对象 查找所有value是这个对象的所有key
     NSArray *allKey = [dic3 allKeysForObject:@"zhangsan"];
    NSLog(@"&&&%@",allKey);
    
    //7
    NSLog( @"%@",dic3[@"name"]);
    
    // 可变字典 NSMutableArray
    NSMutableDictionary *mdic = [NSMutableDictionary dictionary];
    NSMutableDictionary *mdic1 =[@{} mutableCopy];
    //2.取值 与不可变字典相同
    //3.增 删 减
    // 1> 添加 [mdic setObject:value forKey:key]
    // 注意： 字典中的key不要重复 如果重复会以最后的value进行赋值
    [mdic setObject:@"d" forKey:@"name"];
    [mdic removeObjectForKey:@"name"];
    [mdic removeAllObjects];
    NSLog(@"%@",mdic);
    // 语法糖 与setobject: forkey:相同
    mdic [@"name"] = @"李四";
#endif
    /** 完成以下需求
     需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
     2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
     3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
     4、删除某个分组的全部联系人。 */
    AddressBook *ab = [[AddressBook alloc]init];
    Contact *con1 = [Contact contactWithName:@"zhangsan" phoneNum:@"110"];
    Contact *con2 = [Contact contactWithName:@"lisi" phoneNum:@"120"];
    Contact *con3 = [Contact contactWithName:@"tom" phoneNum:@"119"];
    //Contact *con4 = [Contact contactWithName:@"" phoneNum:@""];
    [ab addContact:con1];
    [ab addContact:con2];
    [ab addContact:con3];
    //[ab addContact:con4];
    NSLog(@"111%@",ab.mDic);
    [ab removeContact:con3];
    NSLog(@"222%@",ab.mDic);
    //直接转换字符串
    NSLog(@"%@",[@10 description]);
    NSLog(@"%@",[@10.20 description]);
    
    //2.集合
    // 不可变 NSSet 可变NSMutableSet
    //集合会删掉重复的内容（互异性）
    // 要删除数组或者字典中的内容，放入集合中
    NSSet *set = [[NSSet alloc]initWithObjects:@"s",@"a", nil];
    // 构造器
    NSSet *set1 = [NSSet setWithObjects:@"d",@"a", nil];
    // 没有提供集合的字面量
    //取值
    // 从集合中取出任意元素
    [set anyObject];
    // count
    NSUInteger i = set.count;
    
    
    NSArray *repeatArry = @[@10,@20,@10,@30,@100];
    NSLog(@"$%@",repeatArry);
    NSSet *repeatSet = [NSSet setWithArray:repeatArry];
    repeatArry = repeatSet.allObjects;
    NSLog(@"%@",repeatArry);
    
    
    
    
    
    
    
    return 0;
}
